#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 1e5 + 10;
int tree[maxn]; // 树状数组
int arr[maxn];
int n,m;

int lowbit(int x){
	return x&(-x);
}


void update(int pos, int y){ // pos 修改量为 y, 而不是修改为 y
	// 修改是从左往右修改
	// 涉及到的区间都更改
	arr[pos]+=y;
	for(int i=pos;i<=n;i+=lowbit(i)){
		tree[i]+=y;
	}
}

int getprefix(int pos){
	int res=0;
	// 获得前缀是 -
	for(int i=pos;i>0;i-=lowbit(i)){ // 注意这里面不能为 0, 否则死循环
		res+=tree[i];
	}
	return res;
}

// 获取区间范围内的值
int getpart(int l, int r){
	int res=0;
	res=getprefix(r)-getprefix(l-1);
	return res;
}


int getres(int pos){
	int res=(2*pos-n-1)*arr[pos];
	res=res-getpart(1, pos-1)+getpart(pos+1, n);
	return res;
}

void solve(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		// 因为不是直接存的, 而是存放到树状数组的, 所以需要对涉及到的区间都进行修改
		int a;
		cin>>a;
		update(i, a);
	}
	for(int i=1;i<=m;i++){
		int op, x,z;
		cin>>op;
		if(op==1){
			// 修改
			cin>>x>>z;
			update(x, -arr[x]+z); // 注意这里面填的是修改量
		} else{
			// 查询
			cin>>x;
			cout<<getres(x)<<'\n';
		}
	}
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
